package cn.edu.jxust.core.domain.repository;

import cn.edu.jxust.common.domain.entity.Account;
import cn.edu.jxust.common.domain.dto.AccountRoleVo;
import cn.edu.jxust.common.domain.dto.AccountVo;
import cn.edu.jxust.common.domain.dto.PasswordVo;
import cn.edu.jxust.common.domain.dto.SlfInfoVo;
import cn.edu.jxust.common.response.Result;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;

/**
 * @author QiuKangming
 * @since 2020-06-29
 */

@SuppressWarnings("unused")
public interface AccountService extends IService<Account> {

    /**
     * 根据账户名获取账户
     * @param accountName 账户名
     * @return Account
     */
    Account getByAccName(String accountName);

    /**
     * @param paramMap 参数map集合
     * @param page 第几页
     * @param size 一页几条数据
     * @return Result
     */
    Result getAccountVoList(Map<String, String[]> paramMap, Integer page, Integer size);

    /**
     * 为账户分配角色
     * @param accountRoleVo 账户视图对象
     * @return Result
     */
    Result toAccountRole(AccountRoleVo accountRoleVo);

    /**
     * 批量删除账户信息
     * @param idsStr 账户id号组成的字符串以 , 分割
     * @return Result
     */
    Result delAccountBatch(String idsStr);

    /**
     * 修改账户信息
     * @param accountVo 账户试图对象
     * @return boolean
     */
    boolean modifyAccount(AccountVo accountVo);

    /**
     * 根据id删除账户信息
     * @param id 账户id
     * @return Result
     */
    Result delAccountById(Integer id);

    /**
     * 添加/注册账户信息
     * @param accountVo 前端视图对象
     * @return Result
     */
    Result addAccountInfo(AccountVo accountVo);

    /**
     * 根据账户名称获取账户视图对象
     * @param name 账户名称
     * @return AccountVo
     */
    AccountVo toAccountVo(String name);

    /**
     * 判断用户名是否存在
     * @param username 用户名
     * @return boolean
     */
    boolean isExist(String username);

    /**
     * 给用户重置密码
     * @param username 用户名
     * @return Result
     */
    Result resetPwd(String username);

    /**
     * 修改个人信息
     * @param slfInfo 个人信息视图对象
     * @return Result
     */
    Result modifySelfInfo(SlfInfoVo slfInfo);

    /**
     * 修改个人密码
     * @param passwordVo 密码视图对象
     * @return Result
     */
    Result modifySelfPwd(PasswordVo passwordVo);

    /**
     * 将 Account 转换成 AccountVo
     * @param account 账户视图对象
     * @return AccountVo
     */
    AccountVo toAccountVo(Account account);

}
